package edu.pe.cayetano.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import org.apache.commons.beanutils.DynaBean;

import ws.synopsis.frmwrk.common.BResult;
import edu.pe.cayetano.framework.Configuration;
import edu.pe.cayetano.framework.DAOException;
import edu.pe.cayetano.model.bean.OrdenServicioBean;
import edu.pe.cayetano.seccd.constantes.ConstantesSECCD;
import edu.pe.cayetano.util.Utilitario;
import edu.pe.cayetano.util.UtilitarioTime;

public class OrdenServicioDAO extends BaseDAO{

	
	public OrdenServicioDAO(Connection cnx) {
		super(cnx);
	}

	
	public BResult insertaOrdenServicio(DynaBean dyna) throws Exception {
		String 					schema			= Configuration.getSchemaDB();
		BResult					ret				= null;
		PreparedStatement		pstmt 		 	= null;
		try{		
			StringBuffer query  = new StringBuffer();
			query.append(" INSERT INTO "+schema+"ORDEN_SERVICIO VALUES(?,?,?,?,?,?,?,?,?)");
			System.out.println("data:<"+Utilitario.getPropertyDynaBean(dyna,"cboOperador")+">");
			pstmt = getConnection().prepareStatement(query.toString());
			pstmt.setString(1,Utilitario.getPropertyDynaBean(dyna,"codigo"));
			pstmt.setString(2,Utilitario.getPropertyDynaBean(dyna,"cboSede"));
			pstmt.setString(3,UtilitarioTime.devuelveFechaActual());
			pstmt.setString(4,UtilitarioTime.obtieneHora());
			pstmt.setString(5,Utilitario.getPropertyDynaBean(dyna,"txtCodigoPaciente"));
			pstmt.setString(6,Utilitario.getPropertyDynaBean(dyna,"cboServicio"));
			pstmt.setString(7,Utilitario.getPropertyDynaBean(dyna,"txtComentario"));
			if(Utilitario.getPropertyDynaBean(dyna,"cboOperador")==null)
				pstmt.setString(8,ConstantesSECCD.VALOR_CERO);
			else
				pstmt.setString(8,Utilitario.getPropertyDynaBean(dyna,"cboOperador"));
			System.out.println("("+Utilitario.getPropertyDynaBean(dyna,"cboOperador")+")");
			if((ConstantesSECCD.VALOR_CERO.equalsIgnoreCase(Utilitario.getPropertyDynaBean(dyna,"cboOperador"))||(Utilitario.getPropertyDynaBean(dyna,"cboOperador")==null))){
				pstmt.setString(9,ConstantesSECCD.ESTADO_POR_ASIGNAR);
					
			}else{
				pstmt.setString(9,ConstantesSECCD.ESTADO_ASIGNADO);
			}
			pstmt.executeUpdate();	
			ret = new BResult();
			ret.setCode(0);
		}catch(Exception e){
			ret = new BResult();
			ret.setCode(-1);
			ret.setMessage(e.getMessage());
		}finally{
			try{
				pstmt.close();
			}
			catch(Exception e){
				throw new DAOException(e.getMessage());	
			}
		}
		return ret;
	} 
	
	
	public BResult editaOrdenServicio(DynaBean dyna) throws Exception {
		String 					schema			= Configuration.getSchemaDB();
		BResult					ret				= null;
		PreparedStatement		pstmt 		 	= null;
		try{		
			StringBuffer query  = new StringBuffer();
			query.append(" UPDATE "+schema+"ORDEN_SERVICIO SET SEDE_ID=?,PACIENTE_ID=?,SERVICIO_ID=?,CONCEPTO=?,");
			query.append(" CODIGO_ALUMNO=?,ESTADO_ID=? WHERE NROORDENSERVICIO=?"); 
			pstmt = getConnection().prepareStatement(query.toString());
			pstmt.setString(1,Utilitario.getPropertyDynaBean(dyna,"cboSede"));
			pstmt.setString(2,Utilitario.getPropertyDynaBean(dyna,"txtCodigoPaciente"));
			pstmt.setString(3,Utilitario.getPropertyDynaBean(dyna,"cboServicio"));
			pstmt.setString(4,Utilitario.getPropertyDynaBean(dyna,"txtComentario"));
			pstmt.setString(5,Utilitario.getPropertyDynaBean(dyna,"cboOperador"));
			if(Utilitario.validaAtributoDynaBean(dyna, "cboEstado"))
				pstmt.setString(6,Utilitario.getPropertyDynaBean(dyna,"cboEstado"));
			else	
				pstmt.setString(6,ConstantesSECCD.ESTADO_ASIGNADO);
			pstmt.setString(7,Utilitario.getPropertyDynaBean(dyna,"nroOrdenServicio"));
			pstmt.executeUpdate();	
			ret = new BResult();
			ret.setCode(0);
		}catch(Exception e){
			ret = new BResult();
			ret.setCode(-1);
			ret.setMessage(e.getMessage());
		}finally{
			try{
				pstmt.close();
			}
			catch(Exception e){
				throw new DAOException(e.getMessage());	
			}
		}
		return ret;
	} 
	
	public BResult retornaOrdenServicio(DynaBean dyna) throws Exception {

		String 					schema				= Configuration.getSchemaDB();
		OrdenServicioBean		ordenServicioTO	 	= null;
		PreparedStatement   	pstmt 		 		= null;
		ResultSet 				rs 			 		= null;
		BResult					ret					= null;
		try{		
			StringBuffer query  = new StringBuffer();
			query.append(" SELECT"); 
			query.append(" NROORDENSERVICIO,OS.SEDE_ID,OS.SERVICIO_ID,ES.ESPECIALIDAD_ID,");
			query.append(" CONCEPTO,A.CODIGO_ALUMNO,FECHA,PA.PACIENTE_ID, OS.ESTADO_ID,PAC.CICLO_ID,PA.APEPATERNO,PA.NOMBRES,PA.DNI,A.CODIGO_ALUMNO");
			query.append(" FROM "+schema+"ORDEN_SERVICIO OS INNER JOIN "+schema+"SERVICIO SE ");
			query.append(" ON SE.SERVICIO_ID=OS.SERVICIO_ID ");
			query.append(" INNER JOIN "+schema+"ESPECIALIDAD ES ON ES.ESPECIALIDAD_ID=SE.ESPECIALIDAD_ID");
			query.append(" INNER JOIN "+schema+"ALUMNO A ON OS.CODIGO_ALUMNO=A.CODIGO_ALUMNO");
			query.append(" INNER JOIN "+schema+"PACIENTE PA ON PA.PACIENTE_ID=OS.PACIENTE_ID");
			query.append(" INNER JOIN "+schema+"PERIODO_ACAD_CICLO PAC ON PAC.PERACADCICLO_ID=A.PERACADCICLO_ID");
			query.append(" WHERE NROORDENSERVICIO=? ");
			System.out.println("query retornaOrdenServicio:"+query.toString());
			pstmt = getConnection().prepareStatement(query.toString());
			pstmt.setString(1,Utilitario.getPropertyDynaBean(dyna,"codigo"));
			rs=pstmt.executeQuery();		
			if(rs.next()){
				ordenServicioTO=new OrdenServicioBean();
				ordenServicioTO.setNroOrdenServicio(rs.getInt(1));
				ordenServicioTO.setSedeID(rs.getInt(2));
				ordenServicioTO.setServicioID(rs.getInt(3));
				ordenServicioTO.setEspecialidadID(rs.getInt(4));
				ordenServicioTO.setComentario(rs.getString(5));
				ordenServicioTO.setCodigoAlumno(rs.getString(6));
				ordenServicioTO.setFecha(rs.getString(7));
				ordenServicioTO.setPacienteID(rs.getString(8));
				ordenServicioTO.setEstadoID(rs.getInt(9));
				ordenServicioTO.setCicloID(rs.getInt(10));
				ordenServicioTO.setNombreCompleto(rs.getString(11)+", "+rs.getString(12));
				ordenServicioTO.setDni(rs.getString(13));
				ordenServicioTO.setCodigoAlumno(rs.getString(14));
			}
			ret = new BResult();
			ret.setObject(ordenServicioTO);
			ret.setCode(0);
		}catch(Exception e){
			ret = new BResult();
			ret.setCode(-1);
			ret.setMessage(e.getMessage());
		}finally{
			try{
				pstmt.close();
				rs.close();
			}
			catch(Exception e){
				throw new DAOException(e.getMessage());	
			}
		}
		return ret;
	}

}